#==============================================================================
#-*- DEFAULT VALUES -*-
#==============================================================================
JAVA_ ?= java
JAVAC_ ?= javac
JAR_ ?= jar
RM_ ?= rm -f
SRC_DIR ?= src/
BUILD_DIR ?= build/

#==============================================================================
#-*- FUNCTIONS -*-
#==============================================================================
define ECHO
    @printf "\033[;32m"; printf $1; printf "\033[0m\n"
endef

define make_java_rule
$(addprefix $(BUILD_DIR), $(addsuffix .class, $(basename $1))): $(addprefix $(SRC_DIR), $1)
	@$(call ECHO, "[compiling $$@ ...]")
	@$(JAVAC_) -d $(BUILD_DIR) -cp $(BUILD_DIR) $$<
endef

#==============================================================================
#-*- MAIN -*-
#==============================================================================
CLASSES = $(addprefix $(BUILD_DIR), $(addsuffix .class, $(basename $(SRCS))))
JAR_CLASSES = $(addprefix -C $(BUILD_DIR) , $(addsuffix .class, $(basename $(SRCS))))

debug: $(TARGET)
release: $(TARGET)

$(TARGET): $(CLASSES)
	@$(call ECHO, "[make jar file $(TARGET) ...]")
	@$(JAR_) -cvfe $(TARGET) $(MAIN_CLASS) $(JAR_CLASSES)

$(foreach SRC, $(filter %.java, $(SRCS)), $(eval $(call make_java_rule, $(SRC))))

clean:
	@$(call ECHO, "[cleaning $(CLASSES) $(TARGET)...]")
	@$(RM_) $(CLASSES) $(TARGET)

